
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>什么是数据库游标？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>什么是数据库游标？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">什么是数据库游标（Cursor）？它的主要作用是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">游标是一个数据库对象，它指向查询结果集的当前行，允许对结果集进行逐行处理和操作。其主要作用是让应用程序可以逐步检索和操作查询结果集中的数据，而不是一次性处理整个结果集。</div>
          </div>
          <div class="card-source">来源: 1. 游标的基本概念</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">使用数据库游标的典型工作流程包含哪几个主要步骤？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">使用游标的典型工作流程通常包括五个步骤：<br>1. 声明游标 (DECLARE)<br>2. 打开游标 (OPEN)<br>3. 提取数据 (FETCH)<br>4. 关闭游标 (CLOSE)<br>5. 释放游标 (DEALLOCATE)，此步骤在某些数据库系统中是可选的。</div>
          </div>
          <div class="card-source">来源: 2. 游标的工作流程</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">分类</div>
          <div class="card-question">数据库游标可以分为哪两种主要类型？它们之间有何区别？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">分类</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">数据库游标分为隐式游标（Implicit Cursor）和显式游标（Explicit Cursor）。区别在于：隐式游标由数据库系统自动管理，用于处理简单的 SQL 语句（如 SELECT, INSERT, UPDATE, DELETE）；而显式游标由开发者显式声明和管理，用于处理需要逐行操作的复杂查询，提供更多的控制权和灵活性。</div>
          </div>
          <div class="card-source">来源: 3. 游标的类型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在哪些应用场景下适合使用数据库游标？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">游标主要适用于以下三种场景：<br>1.  **逐行处理**：当需要计算或更新结果集中的每一行数据时。<br>2.  **复杂操作**：当需要在查询结果的每一行上执行复杂的逻辑或多个 SQL 操作时。<br>3.  **业务逻辑**：当业务逻辑要求逐步处理数据（如批处理操作）而不是一次性处理时。</div>
          </div>
          <div class="card-source">来源: 4. 游标的应用场景</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">使用数据库游标有哪些主要优点？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">使用游标的主要优点有两个：<br>1.  **控制精度**：它提供了对结果集的精确控制，使得逐行处理数据成为可能。<br>2.  **灵活性**：它允许开发者在遍历结果集的过程中执行复杂的逻辑操作。</div>
          </div>
          <div class="card-source">来源: 5. 游标的优缺点</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">特性</div>
          <div class="card-question">为什么说游标可能会带来性能开销？其主要缺点是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">特性</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">游标操作可能导致性能下降，因为它们需要逐行读取数据，这对于大结果集尤其明显。其主要缺点是性能开销和复杂性，即使用游标需要编写和管理更多的代码，可能使应用程序变得复杂。</div>
          </div>
          <div class="card-source">来源: 5. 游标的优缺点</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
